package ar.com.logic.components.actualizadores;

import ar.com.logic.components.interfaces.IHistoricoRespuestas;
import ar.com.logic.components.interfaces.IMatrizPosiciones;

/*Me fijo si los valores que no se utilizaron se pueden descartar
 Para eso se chequea que la cantidad restante sea igual a la cantidad de digitos posibles (10 o 9) menos 
 la cantidad de numeros distintos usados hasta el momento.
 Es decir, si estoy en el segundo turno y use 8 numeros distintos, me quedan 2 sin usar.
 Luego tengo que verificar que la cantidad de numero encontrados sea mayor o igual a la cantidad de digitos en la solucion.
 En caso de que se juegue con 4 digitos, se espera que la suma entre correctos y regulares de mas de 4 (en el segundo turno).
 
 Solo se puede aplicar hasta el 2do turno
 */
public class ActualizadorPorDescarteSinUso implements IActualizadorPosiciones {

	public boolean esDeEjecucionUnica() {

		return true;
	}

	public boolean actualizar(IMatrizPosiciones matriz,	IHistoricoRespuestas historico) {
		Integer numerosSinUso = historico.getCantidadNumerosNoUtilizados();
		Integer numerosTotalesUsados = historico.getUltimoTurno() * matriz.getMaxPosiciones();
		//Cantidad de digitos buscados - los numeros totales usados. Si los numeros usados son todos distintos, debe dar el complemento
		Integer nrd = matriz.getMaxDigitos() - numerosTotalesUsados;
		if(historico.getUltimoTurno() > 2){
			//Pasado el segundo turno se desecha el actualizador
			return true;
		}
		//Numeros sin uso = al complemento, todos los numeros no usados
		if ( numerosSinUso == nrd ) {
			if (historico.obtenerTotalEncontradosEnNUltimasRespuestas(historico
					.getUltimoTurno()) >= matriz.getMaxPosiciones()) {

				for (Integer noUtilizado : historico.getNumerosNoUtilizados()) {
					matriz.descartarValor(noUtilizado);
				}
				historico.borrarNoUtilizados();
				return true;
			}

		}
		return false;
	}

}
